﻿/*
 * KLF Headless Browser
 * Written by Kris Oye <kristianoye@gmail.com>
 * Copyright (C) 2011-2012.  All rights reserved.
 */
namespace KLF.Lib.Browser.DOM.Interface
{
    /// <summary>
    /// The DOMConfiguration interface represents the configuration of a 
    /// document and maintains a table of recognized parameters. Using the
    /// configuration, it is possible to change Document.normalizeDocument()
    /// behavior, such as replacing the CDATASection nodes with Text nodes 
    /// or specifying the type of the schema that must be used when the 
    /// validation of the Document is requested. DOMConfiguration objects
    /// are also used in [DOM Level 3 Load and Save] in the DOMParser and 
    /// DOMSerializer interfaces.
    /// 
    /// The parameter names used by the DOMConfiguration object are defined 
    /// throughout the DOM Level 3 specifications. Names are case-insensitive.
    /// To avoid possible conflicts, as a convention, names referring to 
    /// parameters defined outside the DOM specification should be made unique.
    /// Because parameters are exposed as properties in the ECMAScript Language
    /// Binding, names are recommended to follow the section "5.16 Identifiers"
    /// of [Unicode] with the addition of the character '-' (HYPHEN-MINUS) but
    /// it is not enforced by the DOM implementation. DOM Level 3 Core 
    /// Implementations are required to recognize all parameters defined in 
    /// this specification. Some parameter values may also be required to be 
    /// supported by the implementation. Refer to the definition of the 
    /// parameter to know if a value must be supported or not.
    /// 
    /// Note: Parameters are similar to features and properties used in SAX2 [SAX]. 
    /// </summary>
    public interface IDOMConfiguration
    {
        void setParameter(string name, string value);

        object getParameter(string name);

        bool canSetParameter(string name, string value);

        DOMStringList parameternames { get; }
    }
}
